package cn.lg.soar.core.manager;

import cn.lg.soar.common.util.current.CurrentUser;
import cn.lg.soar.common.util.token.SoarJWT;

/**
 * 无状态token管理器
 * @author luguoxiang
 * @date 2022/4/4
 * 开源项目：https://gitee.com/lgx1992/lg-soar 求star！请给我star！请帮我点个star！
 */
public class TokenManager {

    protected final SoarJWT soarJWT;

    public TokenManager(SoarJWT soarJWT) {
        this.soarJWT = soarJWT;
    }

    /**
     * 创建token
     * @param refreshToken 刷新token
     * @param clientSalt 客户端盐
     * @return 返回 accessToken
     */
    public String create(String refreshToken, String clientSalt) {
        Object[] payload = SoarJWT.parsePayload(refreshToken, Object[].class);
        return soarJWT.create(payload, clientSalt);
    }

    /**
     * 验证解析token，
     * @param accessToken token
     * @param clientSalt 客户端盐
     * @return 返回用户信息，验证失败返回null
     */
    public CurrentUser getUserInfo(String accessToken, String clientSalt) {
        SoarJWT.Result verify = soarJWT.verify(accessToken, clientSalt);
        if (verify.invalid()) {
            return null;
        }
        return CurrentUser.valueOf(verify.getPayload(Object[].class));
    }

}
